// /$$
//  $ @Author: YourName
//  $ @Date: 2024-05-12 13:38:29
//  $ @LastEditTime: 2024-05-12 13:38:42
//  $ @LastEditors: YourName
//  $ @Description: 
//  $ @FilePath: \冲锋号影视\src\utils\http.js
//  $ @版权声明
//  $/
// 对axiso进行基础配置
import axios from 'axios'
import { useTokenInfoStore } from '@/stores/login-Pinia'
import { ElMessage } from 'element-plus';
import router from '@/router';
// 设置基地址
const httpInstance = axios.create({
    // baseURL: 'http://192.168.1.35:18080',
    baseURL:'https://yingshi.saas.youyougoo.com',
    timeout: 5000
})


// 请求拦截器
httpInstance.interceptors.request.use(config => {
    if (shouldNotIntercept(config)) {
        // 如果不需要拦截，则直接返回 config
        config.headers['tenant-id'] = '155';
        return config;
    } else if (getRefreshTokenNotIntercept(config)) {
        let tokenInfoStore = useTokenInfoStore()
        config.headers['tenant-id'] = '155';
        config.headers['Authorization'] = "Bearer " + tokenInfoStore.getterAccessToken;
        return config;
    } else {
        let tokenInfoStore = useTokenInfoStore()
        tokenInfoStore.beforeRquestCheckAndDoRefreshToken(tokenInfoStore.getterRefreshToken, tokenInfoStore.getterExpiresTime);
        if (!tokenInfoStore.getterAccessToken) {
            // 如果 token 为空，显示提示信息并跳转到登录页
            localStorage.removeItem("tokenInfo");
            ElMessage.error('登录状态已过期，请重新登录');
            router.push("/")
        } else {
            // 在发送请求之前做些什么
            config.headers['tenant-id'] = '155';
            config.headers['Authorization'] = "Bearer " + tokenInfoStore.getterAccessToken;
            // 确保每次发送请求之前都添加这些头部信息s
            return config;
        }
    }
}, error => {
    // 对请求错误做些什么
    ElMessage.error(error)
});

// 拦截器
function shouldNotIntercept(config) {
    // 根据 config 中的某些属性来判断
    // 例如，如果请求的 URL 包含 '/app-api/system/auth/login'，则不拦截
    if (config.url.includes('/app-api/system/auth/login')) {
        return true
    } else {
        return false
    }
}

function getRefreshTokenNotIntercept(config) {
    // 根据 config 中的某些属性来判断
    // 例如，如果请求的 URL 包含 '/app-api/system/auth/login'，则不拦截
    if (config.url.includes('/app-api/system/auth/refresh-token')) {
        return true
    } else {
        return false
    }
}

// 响应拦截器
httpInstance.interceptors.response.use(
    response => {
        // 对响应数据做点什么，通常直接返回response.data
        return response.data;
    },
    error => {
        // 对响应错误做点什么
        return Promise.reject(error);
    }
);
export default httpInstance